//跳跃问题 力扣55
public class Solution4 {
    public boolean canJump(int[] nums) {
        int max = 0;//可达的最远处下标
        int l = nums.length-1;
        if(nums[0]==0&&l!=0){
            return false;
        }//如果第一个为0，且数组长度不为1，那么false
        for(int i=0;i<l;i++){
            if(i>max){
                break;
            }
            if(nums[i]>=max-i){
                max = i+nums[i];
            }
        }//不断在max范围内向后走，如果满足条件就更新最远下标值max
        if(max>=l){
            return true;
        }//说明可以到达数组最末尾
        return false;
    }
}


//跳跃问题2 需要找出能到达末尾的最小跳数，同样是贪心的思想，只是需要从末尾考虑
class SolutionZ {
    public int jump(int[] nums) {
        int position = nums.length - 1;
        int steps = 0;
        while (position > 0) {
            for (int i = 0; i < position; i++) {
                if (i + nums[i] >= position) {
                    position = i;
                    steps++;
                    break;
                }
            }
        }
        return steps;
    }
}

